home *** CD-ROM | disk | FTP | other *** search
/ ftp.alaska-software.com / 2014.06.ftp.alaska-software.com.tar / ftp.alaska-software.com / 3pp / mxsetup.old / {app} / MxGoodies.prg < prev    next >
Text File  |  2001-09-25  |  6KB  |  203 lines

  1. //////////////////////////////////////////////////////////////////////
  2. //
  3. // MxGoodies.PRG
  4. //
  5. //  Copyright:
  6. //      Maniacc Software Inc., (c) 2001. All rights reserved.         
  7. //  
  8. //  Contents:
  9. //      Special Routines
  10. //          MxUnique( cClass, cProgName, cTitle ) - Prevents multiples
  11. //                                                  of the same App.
  12. //          GetLongFileName( cShortName, lPath )  - Gets the Long File
  13. //                                                  Name from the Short
  14. //                                                  File Name (8.3)
  15. //          GetShortFileName( cLongName )         - Gets the Short File
  16. //                                                  Name (8.3) from the 
  17. //                                                  Short File Name
  18. //          AllWindows()                          - Display Title of All
  19. //                                                  Top Level Windows
  20. //          MxMail( cMailto, cSubject, cBody )    - Starts the Mail Handler.
  21. //          ShellOpenFile( cFile )                - Call ShellExecute()          
  22. //
  23. //////////////////////////////////////////////////////////////////////
  24.  
  25. #include "Dll.ch"
  26. #INCLUDE "Bap.ch"
  27.  
  28. #define SW_HIDE             0
  29. #define SW_SHOWNORMAL       1
  30. #define SW_NORMAL           1
  31. #define SW_SHOWMINIMIZED    2
  32. #define SW_SHOWMAXIMIZED    3
  33. #define SW_MAXIMIZE         3
  34. #define SW_SHOWNOACTIVATE   4
  35. #define SW_SHOW             5
  36. #define SW_MINIMIZE         6
  37. #define SW_SHOWMINNOACTIVE  7
  38. #define SW_SHOWNA           8
  39. #define SW_RESTORE          9
  40. #define SW_SHOWDEFAULT      10
  41. #define SW_MAX              10
  42.  
  43. DLLFUNCTION FindWindowA( @ClassName, WinName )  USING STDCALL FROM USER32.DLL
  44. DLLFUNCTION GetForegroundWindow()  USING STDCALL FROM USER32.DLL
  45. DLLFUNCTION IsIconic( nHwnd )  USING STDCALL FROM USER32.DLL
  46. DLLFUNCTION GetLastActivePopup( nHwnd )  USING STDCALL FROM USER32.DLL
  47. DLLFUNCTION ShowWindow( nHwnd, nCmdShow )  USING STDCALL FROM USER32.DLL
  48. DLLFUNCTION BringWindowToTop( nHwnd )  USING STDCALL FROM USER32.DLL
  49. DLLFUNCTION SetForegroundWindow( nHwnd )  USING STDCALL FROM USER32.DLL
  50. DLLFUNCTION GetWindowThreadProcessId( nForgroundHwnd, @nRetProcId )  USING STDCALL FROM USER32.DLL
  51. DLLFUNCTION CreateMutexA( SecAttr, nInitialOwn, cName )  USING STDCALL FROM KERNEL32.DLL
  52. DLLFUNCTION GetLastError()  USING STDCALL FROM KERNEL32.DLL
  53.  
  54. PROCEDURE MxUnique( cClass, cProgName, cTitle )
  55.  
  56.     LOCAL nHwndFind, nHwndForeground, nForegroundId
  57.     LOCAL nFindThreadId, nHwndLast
  58.     LOCAL lRet
  59.  
  60.     nHwndFind := FindWindowA( @cClass, @cTitle )
  61.     CreateMutexA(0,1,cProgName)
  62.     if GetLastError() == 183
  63.         nFindThreadId   := GetWindowThreadProcessId( nHwndFind, 0 )
  64.         nHwndForeground := GetForegroundWindow()
  65.         nForeGroundId   := GetWindowThreadProcessId( nHwndForeground, 0 )
  66.         if nForeGroundId <> nFindThreadId .or. IsIconic( nHwndFind ) <> 0
  67.             nHwndLast := GetLastActivePopup( nHwndFind )
  68.             if IsIconic( nHwndLast ) <> 0
  69.                 ShowWindow( nHwndLast, SW_RESTORE )
  70.             endif
  71.             BringWindowToTop( nHwndLast )
  72.             SetForegroundWindow( nHwndLast )
  73.         endif
  74.         QUIT
  75.     endif
  76.  
  77. RETURN
  78.  
  79.  
  80.  
  81.  
  82. ***************************************************
  83.  
  84. FUNCTION GetLongFileName( cShortName, lPath )
  85.  
  86.     LOCAL lFullPath := iif(empty(lPath), .F., lPath)
  87.     LOCAL cFileName := iif(empty(cShortName), "", alltrim(cShortName))
  88.     LOCAL lEndSlash := iif(right(cFileName, 1)=="\",.T.,.F.)
  89.     LOCAL cLongName := iif(lEndSlash, left(cFileName, len(cFileName) - 1), cFileName)
  90.     LOCAL cPathName := left(cLongName, rat("\", cLongName))
  91.     LOCAL aDir := Directory(cLongName, "DHS")
  92.  
  93.     if right(cLongName, 1) == ":"
  94.         cLongName := upper(cLongName) + iif(lEndSlash, "\", "")
  95.     elseif len(aDir) == 1
  96.         cLongName := alltrim(aDir[1, F_NAME])
  97.     else
  98.         cLongName := iif(lEndSlash, "\", "")
  99.     endif
  100.     if lFullPath
  101.         cLongName := GetLongFileName(cPathName, ("\" $ cPathName)) + cLongName + iif(lEndSlash, "\", "")
  102.     endif
  103.  
  104. RETURN cLongName
  105.  
  106.  
  107.  
  108.  
  109.  
  110. ***************************************************
  111.  
  112. FUNCTION GetShortFileName( cLongName )
  113.  
  114.     LOCAL cShortName := space(255)
  115.     LOCAL nLen := 1
  116.  
  117.     if empty( cLongName )
  118.         cShortName := ""
  119.     else
  120.         nLen := DllCall("Kernel32.DLL", DLL_STDCALL, "GetShortPathNameA", ;
  121.         cLongName, @cShortName, len(cShortName))
  122.         cShortName := left(cShortName, nLen)
  123.     endif
  124.  
  125. RETURN cShortName
  126.  
  127.  
  128.  
  129.  
  130.  
  131. ******************************************************
  132. ******************************************************
  133. *  AllWindows - Display Title of All Top Level Windows
  134. ******************************************************
  135.  
  136. DLLFUNCTION EnumWindows( cProc, nPara ) USING STDCALL FROM USER32.DLL
  137. DLLFUNCTION GetWindowTextA( nHandle, @cBuf, nSize ) USING STDCALL FROM USER32.DLL
  138.  
  139. FUNCTION AllWindows()
  140.     LOCAL i
  141.     PRIVATE aTitles := {}, cTitles := ""
  142.     EnumWindows(BaCallBack("EnumWindow",BA_CB_LPOFNHOOKPROC),0)
  143.     if !empty(aTitles)
  144.         for i := 1 to len(aTitles)
  145.             cTitles := cTitles+aTitles[i]
  146.             if i<len(aTitles)
  147.                 cTitles := cTitles+chr(13)
  148.             endif
  149.         next i
  150. //        MsgBox( cTitles, "Desktop Window Titles" )
  151.         MxMsgBox( cTitles, "Desktop Window Titles", "C" )
  152.     endif
  153. RETURN .T.
  154.  
  155. ******************************************************
  156.  
  157. FUNCTION EnumWindow( nHandle, nr )
  158.  
  159.     LOCAL cBuf := repl(chr(32),100)
  160.     LOCAL nLen := len(cBuf)
  161.  
  162.     nLen := GetWindowTextA( nHandle, @cBuf, nLen )
  163.  
  164.     if nLen > 0
  165. //        MsgBox(left(cBuf,nLen))
  166. //        MxMsgBox(left(cBuf,nLen))
  167.         aAdd(aTitles,left(cBuf,nLen))
  168.     endif
  169.  
  170. RETURN 1
  171.  
  172.  
  173. ******************************************************
  174. ******************************************************
  175. *  MxMail( cMailto, cSubject, cBody, cAttachment )
  176. ******************************************************
  177. ******************************************************
  178.  
  179. FUNCTION MxMail( cMailto, cSubject, cBody )
  180.  
  181.     LOCAL cFile := "mailto:"+cMailto+;
  182.                    " ?subject="+cSubject+;
  183.                    " &body="+cBody
  184.  
  185.     DllCall( "SHELL32.DLL" ,;
  186.     DLL_STDCALL, "ShellExecuteA", AppDesktop():getHWND(), "Open", cFile, Nil, Curdir(), SW_NORMAL )
  187.  
  188. RETURN .T.
  189.  
  190.  
  191. ******************************************************
  192.  
  193. PROCEDURE ShellOpenFile( cFile )
  194.  
  195.     DllCall( "SHELL32.DLL" ,;
  196.     DLL_STDCALL, "ShellExecuteA", AppDesktop():getHWND(), "Open", cFile, Nil, Curdir(), SW_NORMAL )
  197.  
  198. RETURN
  199.  
  200.  
  201.  
  202.  
  203.